Перейти к основному содержимому

1.03. Тест на готовность к работе с данными

Всем

Тест на готовность к работе с данными

1: Данные и информация

Часть A: Вопросы

  1. Что такое данные в контексте информационных систем?
  2. Чем информация отличается от данных?
  3. Приведи пример неструктурированных данных.
  4. Какие характеристики делают данные пригодными для анализа?
  5. Что означает термин «качество данных»?
  6. Почему важно учитывать происхождение данных (data provenance)?
  7. Как данные становятся знанием?
  8. Что такое метаданные и зачем они нужны?
  9. Какие источники данных считаются первичными, а какие — вторичными?
  10. В чём ценность временной метки (timestamp) в наборе данных?

Часть B: Практические задачи

Задача 1.
У тебя есть файл logs.txt, содержащий строки вида:

2026-01-14T08:23:11Z | user_4582 | login_success
2026-01-14T08:25:03Z | user_4582 | page_view:/dashboard
2026-01-14T08:26:47Z | user_9103 | login_failed

Выдели из этого файла только события успешного входа (login_success) и выпиши соответствующие временные метки.

Задача 2.
Дан текстовый фрагмент:

«Погода сегодня ясная. Температура +5°C. Вчера было +3°C. Завтра ожидается дождь.»

Преобразуй этот текст в структурированный формат, содержащий поля: дата, погода, температура. Используй только информацию, явно указанную в тексте.

Задача 3.
Ты получил CSV-файл с колонками: id, name, email, registration_date.
Однако в колонке email встречаются значения вроде "N/A", "-", пустые строки и корректные адреса.
Опиши шаги по очистке этой колонки так, чтобы остались только валидные email-адреса.


Ответы

Часть A: Ответы на вопросы

  1. Данные — это факты, наблюдения или измерения, представленные в форме, пригодной для хранения, передачи и обработки.
  2. Информация — это данные, наделённые смыслом и контекстом, которые позволяют принимать решения или делать выводы.
  3. Пример неструктурированных данных: текст статьи, аудиозапись интервью, изображение с камеры наблюдения.
  4. Пригодность данных для анализа определяется их полнотой, точностью, согласованностью, своевременностью и релевантностью.
  5. Качество данных — это степень, в которой данные соответствуют требованиям конкретного использования: отсутствие ошибок, дубликатов, пропусков и противоречий.
  6. Происхождение данных помогает установить их достоверность, отследить изменения и обеспечить соответствие нормативным требованиям.
  7. Данные становятся знанием после интерпретации, анализа и интеграции в существующую модель понимания мира.
  8. Метаданные — это данные о данных: формат, источник, дата создания, автор, единицы измерения. Они упрощают поиск, управление и понимание основных данных.
  9. Первичные источники — это оригинальные данные, собранные напрямую (опросы, сенсоры, логи). Вторичные — данные, переработанные или агрегированные из первичных (отчёты, аналитические сводки).
  10. Временная метка указывает момент фиксации события, что критично для анализа последовательности, трендов и причинно-следственных связей.

Часть B: Решения задач

Задача 1.
Фильтрация строк с login_success:

2026-01-14T08:23:11Z

(Только одна строка содержит login_success.)

Задача 2.
Структурированный результат (в виде таблицы или списка словарей):

[
{ "дата": "сегодня", "погода": "ясная", "температура": "+5°C" },
{ "дата": "вчера", "погода": "не указана", "температура": "+3°C" }
]

(«Завтра» не включено, так как погода указана как «ожидается», а температура не дана.)

Задача 3.
Шаги очистки:

  1. Удалить строки, где значение email равно "N/A", "-" или пустой строке.
  2. Проверить оставшиеся значения на соответствие базовому шаблону email (наличие символа @, домена после точки).
  3. Сохранить только те строки, где email прошёл проверку.
    (Дополнительно: можно нормализовать регистр — привести к нижнему.)

2: Структуры данных

Часть A: Вопросы

  1. Что такое структура данных?
  2. Какой тип структуры данных обеспечивает доступ к элементам по индексу за константное время?
  3. В чём преимущество связного списка перед массивом при частых вставках и удалениях?
  4. Что такое хеш-таблица и как она обеспечивает быстрый поиск?
  5. Как устроено двоичное дерево поиска?
  6. Чем стек отличается от очереди по принципу обработки элементов?
  7. Когда целесообразно использовать граф для представления данных?
  8. Что означает термин «плоская структура данных»?
  9. Какие структуры данных подходят для хранения иерархической информации?
  10. Почему выбор структуры данных влияет на производительность программы?

Часть B: Практические задачи

Задача 1.
У тебя есть список пользователей:

[
{ "id": 101, "name": "Алиса" },
{ "id": 102, "name": "Борис" },
{ "id": 103, "name": "Вера" }
]

Предложи структуру данных, позволяющую мгновенно находить пользователя по id. Обоснуй выбор.

Задача 2.
Ты реализуешь функцию «Отменить действие» в текстовом редакторе. Какую структуру данных ты выберешь для хранения истории изменений? Опиши логику добавления и извлечения шагов.

Задача 3.
Даны связи между городами:

  • Москва → Санкт-Петербург
  • Москва → Казань
  • Санкт-Петербург → Хельсинки
  • Казань → Екатеринбург

Представь эти данные в виде структуры, подходящей для алгоритма поиска маршрута. Укажи тип структуры и её содержимое.


Ответы

Часть A: Ответы на вопросы

  1. Структура данных — это способ организации, хранения и управления данными, обеспечивающий эффективный доступ и модификацию.
  2. Массив (или динамический массив, например, List в C# или list в Python) обеспечивает доступ по индексу за O(1).
  3. Связный список позволяет вставлять и удалять элементы без перемещения остальных данных, так как операции затрагивают только ссылки между узлами.
  4. Хеш-таблица сопоставляет ключи значениям через хеш-функцию, которая вычисляет индекс в массиве. При хорошем распределении это даёт среднее время поиска O(1).
  5. В двоичном дереве поиска для каждого узла все элементы в левом поддереве меньше его значения, а в правом — больше или равны. Это упорядоченная иерархическая структура.
  6. Стек работает по принципу LIFO (последним пришёл — первым вышел), очередь — по FIFO (первым пришёл — первым вышел).
  7. Граф уместен, когда данные представляют отношения или связи между сущностями: социальные сети, транспортные маршруты, зависимости задач.
  8. Плоская структура данных — это коллекция записей без вложенности, где каждый элемент содержит только скалярные значения (например, таблица с колонками, но без объектов внутри ячеек).
  9. Для иерархической информации подходят деревья, вложенные словари, XML/JSON с рекурсивной структурой или родительско-потомственные таблицы в базах данных.
  10. Разные структуры данных имеют разную сложность операций (поиск, вставка, обход). Неправильный выбор может привести к замедлению работы, избыточному потреблению памяти или усложнению кода.

Часть B: Решения задач

Задача 1.
Использовать хеш-таблицу (словарь), где ключ — id, значение — объект пользователя:

{
"101": { "id": 101, "name": "Алиса" },
"102": { "id": 102, "name": "Борис" },
"103": { "id": 103, "name": "Вера" }
}

Обоснование: поиск по ключу в хеш-таблице выполняется за среднее константное время, что оптимально для частых запросов по id.

Задача 2.
Выбираем стек.

  • При каждом изменении (ввод текста, удаление) состояние документа (или действие) помещается в стек с помощью операции push.
  • При нажатии «Отменить» вызывается pop, извлекая последнее действие и применяя обратную операцию.
    Это точно соответствует LIFO-логике отмены.

Задача 3.
Используем ориентированный граф, представленный в виде списка смежности:

{
"Москва": ["Санкт-Петербург", "Казань"],
"Санкт-Петербург": ["Хельсинки"],
"Казань": ["Екатеринбург"],
"Хельсинки": [],
"Екатеринбург": []
}

Такая структура позволяет эффективно перебирать соседей при поиске в ширину (BFS) или глубину (DFS).


3: Операции с данными

Часть A: Вопросы

  1. Что означает термин «трансформация данных»?
  2. Какие операции входят в этап очистки данных?
  3. Что такое агрегация данных и где она применяется?
  4. Зачем выполняется нормализация числовых данных?
  5. Как происходит объединение (join) двух наборов данных по ключу?
  6. Что такое фильтрация данных и как она влияет на объём анализа?
  7. В чём разница между сортировкой и группировкой данных?
  8. Какие операции позволяют обогатить данные внешней информацией?
  9. Что означает «разворачивание» (unpivot) табличных данных?
  10. Почему важно сохранять историю операций над данными?

Часть B: Практические задачи

Задача 1.
Даны два списка:

  • users = [{"id": 1, "name": "Алиса"}, {"id": 2, "name": "Борис"}]
  • orders = [{"user_id": 1, "product": "Книга"}, {"user_id": 1, "product": "Блокнот"}]

Выполни операцию объединения, чтобы получить список всех заказов с именами пользователей. Представь результат в виде нового списка словарей.

Задача 2.
Таблица содержит колонки: дата, регион, продажи.
Пример:

2026-01-10 | Москва | 15000  
2026-01-10 | СПб | 12000
2026-01-11 | Москва | 18000

Сгруппируй данные по региону и вычисли общую сумму продаж для каждого.

Задача 3.
Исходная таблица в «широком» формате:

месяц     | доход_янв | доход_фев | доход_мар
Проект A | 10000 | 12000 | 11000

Преобразуй её в «длинный» формат с колонками: проект, месяц, доход.


Ответы

Часть A: Ответы на вопросы

  1. Трансформация данных — это процесс изменения формы, структуры или представления данных без потери смысла, например, приведение к единому формату или перекодировка.
  2. Этап очистки включает удаление дубликатов, исправление опечаток, заполнение пропусков, приведение типов, фильтрацию аномалий и унификацию значений.
  3. Агрегация — это свёртка множества значений в одно (сумма, среднее, максимум и т.п.). Применяется в отчётности, аналитике и дашбордах.
  4. Нормализация приводит числовые значения к сопоставимому диапазону (например, от 0 до 1), что улучшает работу алгоритмов машинного обучения и визуализацию.
  5. Объединение по ключу сопоставляет записи из двух наборов, имеющих совпадающее значение в указанной колонке (например, user_id), и создаёт комбинированную запись.
  6. Фильтрация — это отбор подмножества данных по условию (например, только за январь). Она снижает объём обрабатываемых данных и фокусирует анализ.
  7. Сортировка упорядочивает строки по значению колонки (по возрастанию/убыванию). Группировка объединяет строки с одинаковым значением в категории для последующей агрегации.
  8. Обогащение данных достигается через объединение с внешними источниками (справочниками, API, базами знаний), добавляя новые атрибуты (например, географические координаты по адресу).
  9. Разворачивание (unpivot) преобразует колонки в строки: вместо отдельных полей под каждый период создаётся одна колонка с названием периода и одна — со значением.
  10. История операций (data lineage) позволяет воспроизвести результат, проверить корректность, отладить ошибки и обеспечить соответствие требованиям аудита.

Часть B: Решения задач

Задача 1.
Результат объединения (left join по id = user_id):

[
{ "user_id": 1, "product": "Книга", "name": "Алиса" },
{ "user_id": 1, "product": "Блокнот", "name": "Алиса" }
]

(Заказы Бориса отсутствуют, поэтому он не попадает в результат при inner join; если нужен left join от users — он тоже не добавится, так как у него нет заказов.)

Задача 2.
Сгруппированный результат:

Москва | 33000  
СПб | 12000

(15000 + 18000 = 33000 для Москвы)

Задача 3.
«Длинный» формат:

проект    | месяц   | доход
Проект A | янв | 10000
Проект A | фев | 12000
Проект A | мар | 11000

(Каждая колонка с доходом превращается в строку с указанием месяца)


4: SQL и NoSQL

Часть A: Вопросы

  1. Что такое реляционная база данных и как она организует данные?
  2. Какие основные операции поддерживает язык SQL?
  3. Что означает термин «схема» в контексте реляционных баз данных?
  4. В чём преимущество использования первичного ключа?
  5. Как работает оператор JOIN в SQL и какие его типы существуют?
  6. Что такое документ в NoSQL-базах и как он отличается от строки в SQL?
  7. Почему NoSQL-системы часто выбирают для высоконагруженных приложений?
  8. Какие типы NoSQL-баз данных существуют и чем они различаются?
  9. Что означает «горизонтальное масштабирование» и почему оно характерно для NoSQL?
  10. Когда предпочтительнее использовать SQL, а когда — NoSQL?

Часть B: Практические задачи

Задача 1.
Дана таблица employees:

idnamedepartment_idsalary
1Алиса1090000
2Борис2085000
3Вера1095000

Напиши SQL-запрос, который вернёт имя сотрудника с максимальной зарплатой в каждом отделе.

Задача 2.
У тебя есть данные о пользователях и их заказах в формате JSON:

{
"user_id": "u101",
"name": "Алиса",
"orders": [
{ "order_id": "o201", "amount": 1500 },
{ "order_id": "o202", "amount": 2300 }
]
}

Какую NoSQL-модель ты выберешь для хранения таких данных? Обоснуй и опиши структуру документа.

Задача 3.
Ты проектируешь систему аналитики посещений сайта. Каждое событие содержит:

  • user_id
  • timestamp
  • page_url
  • device_type

Объём данных — миллионы событий в день. Частые запросы: «Сколько уникальных пользователей за день?», «Какие страницы самые популярные?».
Выбери тип базы данных (SQL или NoSQL) и обоснуй выбор с учётом нагрузки, структуры и типов запросов.


Ответы

Часть A: Ответы на вопросы

  1. Реляционная база данных хранит данные в виде таблиц, где строки — записи, а столбцы — атрибуты. Связи между таблицами устанавливаются через внешние ключи.
  2. SQL поддерживает операции: SELECT (чтение), INSERT (вставка), UPDATE (обновление), DELETE (удаление), а также управление схемой (CREATE, ALTER) и транзакциями (BEGIN, COMMIT).
  3. Схема — это строгая структура базы данных: определение таблиц, колонок, типов данных, ограничений (например, NOT NULL, UNIQUE) и связей.
  4. Первичный ключ однозначно идентифицирует каждую запись в таблице, обеспечивает целостность и ускоряет поиск.
  5. JOIN объединяет строки из двух или более таблиц на основе совпадения значений в связанных колонках. Типы: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN.
  6. Документ в NoSQL — это самодостаточная структура (обычно в формате JSON/BSON), содержащая вложенные поля и массивы. В отличие от строки SQL, он не обязан соответствовать фиксированной схеме.
  7. NoSQL-системы обеспечивают высокую производительность за счёт отказа от строгой согласованности, гибкой схемы и эффективного горизонтального масштабирования.
  8. Типы NoSQL:
    • Документные (MongoDB) — хранят JSON-подобные документы.
    • Ключ-значение (Redis, DynamoDB) — простые пары.
    • Колоночные (Cassandra) — оптимизированы для аналитики.
    • Графовые (Neo4j) — моделируют связи.
  9. Горизонтальное масштабирование — добавление новых серверов вместо усиления одного. NoSQL-системы проектируются так, чтобы распределять данные по узлам без единой точки отказа.
  10. SQL предпочтителен при необходимости сложных запросов, транзакций и строгой целостности (финансы, учёт). NoSQL — при высокой нагрузке, изменчивой структуре, быстрой разработке и распределённой архитектуре (соцсети, IoT, логи).

Часть B: Решения задач

Задача 1.
SQL-запрос с оконной функцией:

SELECT name, department_id, salary
FROM (
SELECT name, department_id, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn
FROM employees
) ranked
WHERE rn = 1;

Задача 2.
Выбираем документную NoSQL-базу (например, MongoDB).
Структура документа совпадает с исходным JSON:

{
"_id": "u101",
"name": "Алиса",
"orders": [
{ "order_id": "o201", "amount": 1500 },
{ "order_id": "o202", "amount": 2300 }
]
}

Обоснование: данные иерархичны, принадлежат одному пользователю, редко изменяются целиком, и запросы обычно идут по user_id.

Задача 3.
Выбираем колоночную NoSQL-базу (например, Apache Cassandra или Amazon Keyspaces) или временную базу данных (TimescaleDB поверх PostgreSQL, если допустим SQL).
Обоснование:

  • Высокая скорость записи миллионов событий.
  • Запросы агрегируют данные по времени и URL — колоночное хранение эффективно для таких операций.
  • Схема проста и стабильна, но объём требует горизонтального масштабирования.
    Если важна гибкость аналитики и совместимость с BI-инструментами, можно выбрать SQL с оптимизацией под время (TimescaleDB). Если важна масштабируемость и простота — NoSQL (Cassandra/DynamoDB).